﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using _InformaticaIndustrial_DerivdosVinicos.DTO;
using Dao;
using Dao.Intermediarios;


namespace _InformaticaIndustrial_DerivdosVinicos.Interfaz
{
    public partial class BuscarOC : Form
    {
        #region Property
        IPOrdenCompra ipOC = new IPOrdenCompra();
        IPDetalleOC ipDetOC = new IPDetalleOC();
        IPMateriaPrima ipMP = new IPMateriaPrima();
        IPComponente ipComp = new IPComponente();
        OrdenCompra ocompra=new OrdenCompra();
        #endregion Property

        public BuscarOC(Principal principal)
        {
            InitializeComponent();
            dgDetalleOC.AutoGenerateColumns = false;
        }

        private void btSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btBuscar_Click(object sender, EventArgs e)
        {
            IList<OrdenCompra> listaOC = new List<OrdenCompra>();
            IList<MateriaPrima> listaMP = new List<MateriaPrima>();
            IList<DetalleOrdenCompra> detallesOC = new List<DetalleOrdenCompra>();
            dgDetalleOC.Rows.Clear();
            listaOC = ipOC.getCriterioById<OrdenCompra>("idOrdenCompra", "=", Convert.ToInt16(txtNroOC.Text));

            if (listaOC.Count == 0)
                MessageBox.Show("No existe una OC con este número. Verifique el nro ingresado.");
            else
            {
                try
                {
                    foreach (var item in listaOC)
                    {
                       detallesOC=ipDetOC.getCriterioById<DetalleOrdenCompra>("nroOrdenCompra", "=", item.idOC);

                       //dgDetalleOC.DataSource = detallesOC;
                       ocompra=item;
                       txtEstado.Text = item.estado;

                        foreach (var d in detallesOC)
                        {
                            //si el detalle contiene una materia prima
                            // int im =Convert.ToInt16(d.IdMateriaPrima);
                                
                            if (d.IdMateriaPrima != null)
                            {
                               // listaMP = ipMP.getCriterioById<MateriaPrima>("IdMateriaPrima", "=", Convert.ToInt16(d.IdMateriaPrima));
                                listaMP = ipMP.getByCriterio<MateriaPrima>("", "", (d.IdMateriaPrima.ToString()));
                                //IPProveedorMP ipProvMP = new IPProveedorMP();
                                //List<Proveedor_MP> prov=ipProvMP.getByCriterio<Proveedor_MP>("IdMP","=",d.IdMateriaPrima.ToString());
                                
                                foreach (var mp in listaMP)
                                {

                                    DataGridViewRow fila = new DataGridViewRow();
                                    DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                                       
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = mp.codigo;
                                    fila.Cells.Add(cell);
                                    //nombre de materia prima
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = mp.nombre;
                                    fila.Cells.Add(cell);
                                    //cantidad
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = d.cantidad;
                                    fila.Cells.Add(cell);
                                    //precio
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = mp.costo;
                                    fila.Cells.Add(cell);
                                    //subtotal
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = d.subtotal;
                                    fila.Cells.Add(cell);
                                    dgDetalleOC.Rows.Add(fila);
                                }
                            }
                            else
                            {
                                IList<Componente> listaComp = ipComp.getCriterioById<Componente>("IdComponente", "=", Convert.ToInt16(d.IdComponente));
                                foreach (var c in listaComp)
                                {
                                    DataGridViewRow fila = new DataGridViewRow();
                                    DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();

                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = c.codigo;
                                    fila.Cells.Add(cell);
                                    //nombre de materia prima
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = c.nombre;
                                    fila.Cells.Add(cell);
                                    //cantidad
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = d.cantidad;
                                    fila.Cells.Add(cell);
                                    ////precio
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = c.costo;
                                    fila.Cells.Add(cell);
                                    //subtotal
                                    cell = new DataGridViewTextBoxCell();
                                    cell.Value = d.subtotal;
                                    fila.Cells.Add(cell);
                                    dgDetalleOC.Rows.Add(fila);
                                }
                            }
                        }
                    }  
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message);
                }
            }
        }

        private void BuscarOC_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'dataSet1.DetalleOrdenCompra' table. You can move, or remove it, as needed.
          //  this.detalleOrdenCompraTableAdapter.Fill(this.dataSet1.DetalleOrdenCompra);
        }

        private void btModificar_Click(object sender, EventArgs e)
        {
            if (ocompra.estado != "Pendiente")
            {
                MessageBox.Show("La orden de compra no puede ser modificada.");
            }
            else
            {
                Form interf = new _InformaticaIndustrial_DerivdosVinicos.Interfaz.ModificarOC(ocompra);
                this.Visible = true;   // Para que sea visible la Interfaz principal
                interf.Visible = true; // Para que sea visible la Interfaz de MaestroArticulos
            }
        }
    }
}

